/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.supinfo.youfood.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.validator.constraints.NotEmpty;

/**
 *
 * @author Michael
 */
@Entity
@Table(name="produit")
public class Produit implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="id_produit")
    private Long id_produit;
    
    @NotEmpty
    private String libelle;
    
    @NotNull
    private double prixHT;
    
    @NotNull
    private int actif;
    
    @ManyToMany(mappedBy = "produits")
    private List<Menu> menus;

    @ManyToOne
    private CategorieProduit categorie;
    
    @ManyToMany(fetch= FetchType.EAGER)
    @Fetch(FetchMode.SUBSELECT)
    @JoinTable(name="restaurants_produits")
    private List<Restaurant> dansRestaurants;

    public Produit() {
    }

    public Long getId_produit() {
        return id_produit;
    }

    public void setId(Long id_produit) {
        this.id_produit = id_produit;
    }

    public String getLibelle() {
        return libelle;
    }

    public void setLibelle(String libelle) {
        this.libelle = libelle;
    }

    public double getPrixHT() {
        return prixHT;
    }

    public void setPrixHT(double prixHT) {
        this.prixHT = prixHT;
    }
    
    public double getPrix()
    {
        double prix = prixHT+prixHT*categorie.getTVA()/100;
        return Math.round(prix*100)/100.0;
        //return prix;
    }
    
    public CategorieProduit getCategorie() {
        return categorie;
    }

    public void setCategorie(CategorieProduit categorie) {
        this.categorie = categorie;
    }

    public List<Menu> getMenus() {
        return menus;
    }

    public void setMenus(List<Menu> menus) {
        this.menus = menus;
    }

    public int getActif() {
        return actif;
    }

    public void setActif(int actif) {
        this.actif = actif;
    }

    public List<Restaurant> getDansRestaurants() {
        return dansRestaurants;
    }

    public void setDansRestaurants(List<Restaurant> dansRestaurants) {
        this.dansRestaurants = dansRestaurants;
    }
    
    public void addRestaurant(Restaurant resto)
    {
        if(dansRestaurants == null)
        {
            dansRestaurants = new ArrayList();
        }
        if(!dansRestaurants.contains(resto))
        {
            this.dansRestaurants.add(resto);
        }
    }
    
    public void removeRestaurant(Restaurant resto)
    {
        if(dansRestaurants.contains(resto))
        {
            this.dansRestaurants.remove(resto);
        }
    }
    
    public void removeAllRestaurant()
    {
        this.dansRestaurants = null;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Produit other = (Produit) obj;
        if (this.id_produit != other.id_produit && (this.id_produit == null || !this.id_produit.equals(other.id_produit))) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        return hash;
    }
    
}
